package work.vcloud.baseinfo.utils;

import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.DES;

/**
 * DES加密介绍
 * DES是一种对称加密算法，所谓对称加密算法即：加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究，
 * 后来被美国政府正式采用，之后开始广泛流传，但是近些年使用越来越少，因为DES使用56位密钥，以现代计算能力，24小时内即可被破解。虽然如此，在某些简单应用中，我们还是可以使用DES加密算法，本文简单讲解DES的JAVA实现。
 * 注意：DES加密和解密过程中，密钥长度都必须是8的倍数
 */
public class DesUtil {
	public static void main(String[] args) throws Exception {
		String str = "test703D";

		String result = DesUtil.getEncryptionPwd(str);
		System.out.println("加密后："+result);

		try {
			String decryResult = DesUtil.getOriginPwd(result);
			System.out.println("解密后："+decryResult);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}

	private static final String PASSWORD_SECRET_KEY = "wg)wagDImj6452";

	/*
     ** 对密码进行加密
     */
	public static String getEncryptionPwd(String pwd) {
		DES des = new DES(Mode.CBC, Padding.PKCS5Padding, PASSWORD_SECRET_KEY.getBytes(), PASSWORD_SECRET_KEY.substring(5, 13).getBytes());
		return des.encryptHex(pwd);
	}

	/*
	 ** 对加密密码进行解密
	 */
	public static String getOriginPwd(String pwd) {
		DES des = new DES(Mode.CBC, Padding.PKCS5Padding, PASSWORD_SECRET_KEY.getBytes(), PASSWORD_SECRET_KEY.substring(5, 13).getBytes());
		return des.decryptStr(pwd);
	}
}
